/*!
 * 文件名称： driver_dac.c
 * 描    述： dac 驱动文件
 * 版本：     2023-12-03, V1.0
*/

/*
* GD32F303东方红开发板V1.0
* 淘宝商城：   https://juwo.taobao.com
* 技术交流：   https://www.gd32bbs.com/ask/
* 视频学习：   https://space.bilibili.com/475462605
* 微信公众号： gd32bbs
* Copyright    苏州聚沃电子科技有限公司
* 版权所有，盗版必究。
*/

#include "driver_dac.h"



/*!
* 说明     DAC配置函数
* 输入     dac_periph：DAC外设号@DAC0，DAC1
* 返回值   无
*/
void driver_dac_config(uint32_t dac_periph)
{
		rcu_periph_clock_enable(RCU_GPIOA);																		/*使能GPIOA时钟*/
		rcu_periph_clock_enable(RCU_DAC);																			/*使能DAC时钟*/
		/*依据选择的DAC号来初始化IO口*/
		if(dac_periph == DAC0)
		{
			gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
		}
		else
		{
			gpio_init(GPIOA, GPIO_MODE_AIN, GPIO_OSPEED_50MHZ, GPIO_PIN_5);
		}

		dac_deinit();																												/*DAC复位*/
		dac_trigger_disable(dac_periph);																		/*DAC外部触发禁能，即数据写入到保持寄存器就会自动输出电压*/
		dac_wave_mode_config(dac_periph, DAC_WAVE_DISABLE);									/*DAC噪声关闭*/
		dac_output_buffer_enable(dac_periph);  															/*输出缓冲打开*/
		dac_enable(dac_periph);																							/*DAC使能*/
}

/*!
* 说明     DAC输出电压函数
* 输入[1]  dac_periph：DAC外设号@DAC0，DAC1
* 输入[2]  dac_align:  DAC数据位宽及对齐方式 @DAC_ALIGN_8B_R , DAC_ALIGN_12B_R ,DAC_ALIGN_12B_L
* 输入[3]  data：      DAC输出值
* 返回值   无
*/
 void driver_dac_out(uint32_t dac_periph, uint32_t dac_align, uint16_t data)
 {
		dac_data_set(dac_periph,dac_align,data);													 /*写入数据到DAC保持寄存器*/
 }
